package com.example.myapplication.view;

import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.text.Editable;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;

import com.example.myapplication.R;

public class KeyBoardUtils {
    private Keyboard k1;//自定义键盘
    private KeyboardView keyboardView;
    private EditText editText;
    public  interface  OnEnsureListener{
        public  void onEnsure();
    }
    OnEnsureListener onEnsureListener;

    public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
        this.onEnsureListener = onEnsureListener;
    }

    public KeyBoardUtils(KeyboardView keyboardView, EditText editText) {
        this.keyboardView = keyboardView;
        this.editText = editText;
        this.editText.setInputType(InputType.TYPE_NULL);//取消弹出系统键盘
         k1 = new Keyboard(this.editText.getContext(), R.xml.key);
        this.keyboardView.setKeyboard(k1);//设置要显示键盘布局样式
        this.keyboardView.setEnabled(true);//能够使用
        this.keyboardView.setPreviewEnabled(false);//禁止弹出
        this.keyboardView.setOnKeyboardActionListener(listener);//设置键盘按钮监听事件

    }
KeyboardView.OnKeyboardActionListener listener=new KeyboardView.OnKeyboardActionListener() {
    @Override
    public void onPress(int primaryCode) {
    //当用户按下一个键时调用。这是在调用onKey之前发送的。对于重复的键，此操作仅被调用一次。
        //
        //参数：
        //
        //primaryCode 所按下键的unicode。如果触摸的按键无效，则该值为零。
    }

    @Override
    public void onRelease(int primaryCode) {
        //当用户释放键时调用。在onKey被调用后发送。对于重复的键，此操作仅被调用一次。
        //
        //参数：
        //
        //primaryCode 释放的密钥的代码
    }
    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
     //将按键发送给侦听器。
        //
        //参数：
        //
        //primaryCode这是按下的键
        //keyCode对所有可能的备用键的代码进行编码，主要代码为第一个。如果主键代码是单个字符，例如字母，数字或符号，则替代项将包括可能位于同一键或相邻键上的其他字符。这些代码对于纠正意外按下与预期按键相邻的按键很有用。
        Editable editable = editText.getText();
        int start = editText.getSelectionStart();
        switch (primaryCode) {
            case Keyboard.KEYCODE_DELETE:   //删除
                if (editable != null && editable.length() > 0) {
                    if (start > 0) {
                        editable.delete(start - 1, start);
                    }
                }
                break;
            case Keyboard.KEYCODE_CANCEL:    //清零
                editable.clear();
                break;
            case Keyboard.KEYCODE_DONE:    //确定
                onEnsureListener.onEnsure();    //通过接口回调，调用确定方法
                break;
            default:     //其他
                editable.insert(start, Character.toString((char) primaryCode));
                break;
        }
    }

    @Override
    public void onText(CharSequence text) {
        //将字符序列发送到侦听器。
        //
        //参数：
        //
        //文本 要显示的字符序列。
    }
    @Override
    public void swipeLeft() {
        //当用户从右向左快速移动手指时调用。
    }
    @Override
    public void swipeRight() {
        //当用户快速从左向右移动手指时调用。
    }
    @Override
    public void swipeDown() {
        //当用户快速将手指从上移至下时调用。
    }
    @Override
    public void swipeUp() {
        //当用户快速将手指从下移到上时调用。
    }
};
    //显示键盘
    public  void  shoewKeyboard(){
        int visibility = keyboardView.getVisibility();
        if(visibility== View.INVISIBLE||visibility==View.GONE){
            keyboardView.setVisibility(View.VISIBLE);
        }
    }
    //隐藏键盘
    public void  hideKeyboard(){
        int visibility = keyboardView.getVisibility();
        if(visibility== View.VISIBLE){
            keyboardView.setVisibility(View.GONE);
        }
    }
}
